热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

年龄词prob|em在prolog中

如何解决《年龄词prob|em在prolog中》经验,为你挑选了1个好方法。

我知道:
Nick = 2*Kate
(Kate + Lea)= 2*Nick
(Chris + Nick)= 2*(Kate + Lea)
Ashley = 24
Ashley + Kate + Lea = 2*(Chris + Nick)

取消一些后,我发现:
Ashley = 12*Kate => Kate = 2
Lea = 3*Kate => Lea = 6
Nick = 2*Kate => Nick = 4
Chris = 6*Kate => Chris = 12

我试过这个:

:- use_module(library(clpfd)).

ages(As) :-
   As = [Ashley, Lea, Nick, Chris, Kate],
   Ashley #= 24,
   12 * Kate #= Ashley,
   Lea #= 3*Kate,
   Nick #= 2*Kate,
   Chris #= 6*Kate.

输出:

Ashley = 24,
Chris = 12,
Kate = 2,
Lea = 6,
Nick = 4

上面的解决方案工作正常,但老师告诉我,我不能使用取消.我有点困惑,因为没有取消它不起作用.

:- use_module(library(clpfd)).

ages(As) :-
   As = [Ashley, Lea, Nick, Chris, Kate],
   Ashley #= 24,
   Lea + Kate #= 2 * Nick,
   Chris + Nick #= 2 * (Kate + Lea),
   Nick #= 2 * Kate,
   Ashley + Kate + Lea #= 2*(Nick + Chris).

输出:

Ashley = 24,
Lea+Kate+24#=2*Nick+2*Chris,
Chris+Nick#=2*Lea+2*Kate,
Lea+Kate#=2*Nick,
2*Kate#=Nick

有任何想法吗?



1> tas..:

如果age/1按原样调用,则会得到剩余目标(有关详细信息,请参阅CLP(FD)文档)作为答案:

?- ages(As).
As = [24, _G1642, _G1645, _G1648, _G1651],
_G1642+ -2*_G1645+ -2*_G1648+_G1651#= -24,
-2*_G1642+_G1645+_G1648+ -2*_G1651#=0,
_G1642+ -2*_G1645+_G1651#=0,
2*_G1651#=_G1645.

为了获得实际数字,您必须限制数字的范围并随后标记.由于已知没有人达到200年,因此0至200的年龄限制似乎是合理的.然后您的查询提供实际数字作为答案:

?- ages(As), As ins 0..200, label(As).
As = [24, 6, 4, 12, 2].

这解决了您的直接问题.但是,我想补充两点.首先,它产生更清晰可读的代码,以将域限制和标记部分与描述实际关系的谓词分开.其次,它有助于结果的可读性在列表中具有成对的名称年龄.为了说明这些要点,我们定义一个谓词ages2/1来调用核心关系ages2_/2,然后限制和标记年龄.核心关系将年龄与名称分开,并在第二个列表中提供所述年龄,毕竟这些是您要标记的变量.这允许您在调用谓词的单个列表中具有任意复杂的术语ages2/1.随后您可以像在中一样发布约束ages/1.将这些想法放在一起可能看起来像这样:

ages2(NAs) :-
   ages2_(NAs,As),
   As ins 0..200,
   label(As).

ages2_(NAs,As) :-
   NAs = [ashley-Ashley, lea-Lea, nick-Nick, chris-Chris, kate-Kate],
   As = [Ashley, Lea, Nick, Chris, Kate],
   Ashley #= 24,
   Lea + Kate #= 2 * Nick,
   Chris + Nick #= 2 * (Kate + Lea),
   Nick #= 2 * Kate,
   Ashley + Kate + Lea #= 2*(Nick + Chris).

?- ages2(As).
As = [ashley-24, lea-6, nick-4, chris-12, kate-2].


推荐阅读
  • 基因组浏览器中的Wig格式解析
    本文详细介绍了Wiggle(Wig)格式及其在基因组浏览器中的应用,涵盖variableStep和fixedStep两种主要格式的特点、适用场景及具体使用方法。同时,还提供了关于数据值和自定义参数的补充信息。 ... [详细]
  • 本文介绍了如何通过扩展 UnityGUI 创建自定义和复合控件,以满足特定的用户界面需求。内容涵盖简单和静态复合控件的实现,并展示了如何创建复杂的 RGB 滑块。 ... [详细]
  • 本文将介绍网易NEC CSS框架的规范及其在实际项目中的应用。通过详细解析其分类和命名规则,探讨如何编写高效、可维护的CSS代码,并分享一些实用的学习心得。 ... [详细]
  • Unity编辑器插件:NGUI资源引用检测工具
    本文介绍了一款基于NGUI的资源引用检测工具,该工具能够帮助开发者快速查找和管理项目中的资源引用。其功能涵盖Atlas/Sprite、字库、UITexture及组件的引用检测,并提供了替换和修复功能。文末提供源码下载链接。 ... [详细]
  • 本文将深入探讨如何在不依赖第三方库的情况下,使用 React 处理表单输入和验证。我们将介绍一种高效且灵活的方法,涵盖表单提交、输入验证及错误处理等关键功能。 ... [详细]
  • 探讨如何从数据库中按分组获取最大N条记录的方法,并分享新年祝福。本文提供多种解决方案,适用于不同数据库系统,如MySQL、Oracle等。 ... [详细]
  • 本文介绍了如何使用 Python 的 Matplotlib 和 Pandas 库进行数据可视化。通过示例代码展示了折线图、柱状图和水平柱状图的创建方法,并解释了图表参数设置的具体细节。 ... [详细]
  • 利用生成对抗网络生成多标签离散电子健康记录
    本文探讨了通过生成对抗网络(GAN)生成合成电子健康记录(EHR)的方法,旨在解决隐私保护问题并促进医学研究。论文地址为:https://arxiv.org/abs/1703.06490v1。该方法通过生成高维离散变量的综合EHR数据,显著提升了医学研究中的数据可用性和安全性。 ... [详细]
  • 本文探讨了如何在iOS开发环境中,特别是在Xcode 6.1中,设置和应用自定义文本样式。我们将详细介绍实现方法,并提供一些实用的技巧。 ... [详细]
  • Kubernetes 持久化存储与数据卷详解
    本文深入探讨 Kubernetes 中持久化存储的使用场景、PV/PVC/StorageClass 的基本操作及其实现原理,旨在帮助读者理解如何高效管理容器化应用的数据持久化需求。 ... [详细]
  • 本文介绍如何利用 Python 中的 NumPy 和 Matplotlib 库,从 NumPy 数组中绘制线图。通过具体的代码示例和详细解释,帮助读者理解并掌握这一技能。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 本文介绍如何使用.NET Framework开发一个简单的Windows Forms应用程序,以实现图形在窗口内的动态移动。文章详细描述了代码结构、关键逻辑以及最终的实现效果。 ... [详细]
  • 深入理解K近邻分类算法:机器学习100天系列(26)
    本文详细介绍了K近邻分类算法的理论基础,探讨其工作原理、应用场景以及潜在的局限性。作为机器学习100天系列的一部分,旨在为读者提供全面且深入的理解。 ... [详细]
  • 社交网络中的级联行为 ... [详细]
author-avatar
笑如夏风_503
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有